package persistence;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import valueobjects.*;


public class FilepersistenceManager implements PersistenceManager {

	private BufferedReader reader = null;
	private PrintWriter writer = null; 
	
	
	public void openForReading(String datei) throws FileNotFoundException {
		
		reader = new BufferedReader(new FileReader(datei));
	}

	
	public void openForWriting(String datei) throws IOException {
		
		writer = new PrintWriter(new BufferedWriter(new FileWriter(datei)));
	}

	
	public boolean close() {
		
		if (writer != null)
			writer.close();
		
		if (reader != null) {
			try {
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
				return false;
			}
		}

		return true;
		
	}
	
	
	private String liesDaten() throws IOException {
		
		if (reader != null) 
			return reader.readLine();
		else
			return "";
		
	}
	
	private Artikel liesArtikel() throws IOException {
		Object artikel = null;
		reader.readLine();
		return (Artikel) artikel;
	}

	
	private void schreibeDaten(String daten) {
		
		if (writer != null)
			writer.println(daten);
		
	}
	private void schriebeArtikel(Artikel artikel) {
		if(writer != null)
			writer.println(artikel);
	}
	///---Warenkorb---///
	
	public boolean speicherewk (Warenkorb wk) throws IOException{
		
		schreibeDaten(wk.getKunde());
		schreibeDaten(wk.getWkID());		
		schreibeDaten(new Integer(wk.getMenge()).toString());
		schriebeArtikel(wk.getartikel());

		if (wk.isVerfuegbar())
			schreibeDaten("t");
		else
			schreibeDaten("f");
		
		return true;
	}
	
	public Warenkorb ladeWarenkorb() throws IOException {
		

		String kunde = liesDaten();
		if (kunde == null) {
			return null;
		}
		
		String wkID = liesDaten();
		
		String menge = liesDaten();
		int artikelmenge = Integer.parseInt(menge);
		
		Artikel artikel = liesArtikel();
		 
		
		
		String verfuegbarCode = liesDaten();
	

		boolean verfuegbar = false;
		if (verfuegbarCode.equals("t"))
			verfuegbar = true;

		return new Warenkorb(wkID, kunde, artikel, artikelmenge);
	}
	

	///---BIER---///
	
	public boolean speichereArtikel(Artikel a) throws IOException {
		
		schreibeDaten(a.getID());
		schreibeDaten(a.getName());		
		schreibeDaten(new Float(a.getPreis()).toString());
	//	schreibeDaten(a.getInhalt());
	//	schreibeDaten(a.getType());
		schreibeDaten(new Integer(a.getMenge()).toString());
		
		if (a.isverfuegbar())
			schreibeDaten("t");
		else
			schreibeDaten("f");
		
		return true;
		
	}
	
	
	public Artikel ladeArtikel() throws IOException {
		
		String artikelID = liesDaten();
		if (artikelID == null) {
			return null;
		}
		
		String artikelName = liesDaten();
		
		String artikelPreisString = liesDaten();
		float artikelPreis = Float.parseFloat(artikelPreisString);
		
		//String artikelInhalt = liesDaten();
		
		//String type = liesDaten();
		
		String artikelMengeString = liesDaten();
		int artikelMenge = Integer.parseInt(artikelMengeString);
		
		String verfuegbarCode = liesDaten();

		boolean verfuegbar = false;
		if (verfuegbarCode.equals("t"))
			verfuegbar = true;

		return new Artikel(artikelID, artikelName, artikelPreis, artikelMenge, verfuegbar);
	}

	
	///---MITARBEITER---///


	public boolean speichereMitarbeiter(Mitarbeiter m) throws IOException{
		
		schreibeDaten(m.getBenutzername());
		schreibeDaten(m.getPassword());
		schreibeDaten(m.getEmail());
		schreibeDaten(m.getVorname());
		schreibeDaten(m.getNachname());
		schreibeDaten(m.getStrasseUndHausnummer());
		schreibeDaten(m.getWohnort());
		schreibeDaten(new Integer (m.getPLZ()).toString());
					
		return true;
		
	}
	
	
	public Mitarbeiter ladeMitarbeiter() throws IOException {
		
		String benutzername = liesDaten();
		if(benutzername == null){
			return null;
		}
		
		String password = liesDaten();
		String email = liesDaten();
		String vorname = liesDaten();
		String nachname = liesDaten();

		

		return new Mitarbeiter (benutzername, password,email,vorname,nachname);
		
	}

	
	public boolean speichereMitLogFile(String s) {
		
		schreibeDaten(s);
		
		return true;
		
	}
	
	
	public String ladeMitLogFile() throws IOException {
		
		String einLogFile = liesDaten();
		if(einLogFile == null){
			return null;
		}
		else return einLogFile;
		
	}
	
	
	///---KUNDE---///
	

	public boolean speichereKunde(Kunde k) throws IOException{

		schreibeDaten(k.getBenutzername());
		schreibeDaten(k.getPassword());
		schreibeDaten(k.getEmail());
		schreibeDaten(k.getVorname());
		schreibeDaten(k.getNachname());
		schreibeDaten(k.getStrasseUndHausnummer());
		schreibeDaten(k.getWohnort());
		schreibeDaten(new Integer (k.getPLZ()).toString());
		
		return true;
		
	}

	
	public Kunde ladeKunde() throws IOException {

		String benutzername = liesDaten();
		if(benutzername == null){
			return null;
		}
		
		String password = liesDaten();
		String email = liesDaten();
		String vorname = liesDaten();
		String nachname = liesDaten();
		String strUndHausnummer = liesDaten();
		String ort = liesDaten();
		
		String StringPlz = liesDaten();
		int plz = Integer.parseInt(StringPlz);
		

		return new Kunde (benutzername, password,email,vorname,nachname,strUndHausnummer,ort,plz);
		
	}

	
	public boolean speichereKunLogFile(String s) {

		schreibeDaten(s);
		
		return true;
	}
	
	
	public String ladeKunLogFile() throws IOException {
		
		String einLogFile = liesDaten();
		if(einLogFile == null){
			return null;
		}
		else return einLogFile;
		
	}


	
}

